#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : Leo.W
# @Date    : 2024-1-19 14:30
# @Software: PyCharm

"""
关于文件第一行和第二行：
作用：
首先要确定的一点是它不是注释。#! 的作用指出你的python文件从哪调用何种解释器。【注意】：必须指定在第一行才生效
区别：
#!/usr/bin/python3：
严格指定路径，告诉OS执行该script时，调用/usr/bin下的python3解释器。
#!/usr/bin/env python3：（推荐这种写法）
为了防止OS-user没有将python3装在默认的/usr/bin路径里。当系统看到这一行的时候，首先会到env设置里查找python3的安装路径，再调用对应路径下的解释器程序完成操作。

# -*- coding: encoding -*-
声明文件的编码，编码声明要写在文件的第二行。
"""


def variable_type_test():
    """
    变量和数据类型：
    整型：
    Python中可以处理任意大小的整数（Python 2.x中有int和long两种类型的整数，但这种区分对Python来说意义不大，因此在Python 3.x中整数只有int这一种了），
    而且支持二进制（如0b100，换算成十进制是4）、八进制（如0o100，换算成十进制是64）、十进制（100）和十六进制（0x100，换算成十进制是256）的表示法。

    浮点型：
    浮点数也就是小数，之所以称为浮点数，是因为按照科学记数法表示时，一个浮点数的小数点位置是可变的，浮点数除了数学写法（如123.456）之外还支持科学计数法（如1.23456e2）。

    字符串型：
    字符串是以单引号或双引号括起来的任意文本，比如 'hello' 和 "hello",
    字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法，
    多行文本使用用三个单引号或三个双引号开头，三个单引号或三个双引号结尾。

    布尔型：
    布尔值只有 True、False 两种值，要么是 True，要么是 False
    在Python中，可以直接用 True、False 表示布尔值（请注意大小写），也可以通过布尔运算计算出来（例如3 < 5会产生布尔值True，而2 == 1会产生布尔值False）。

    复数型：
    形如 3+5j，跟数学上的复数表示一样，唯一不同的是虚部的i换成了j。实际上，这个类型并不常用，大家了解一下就可以了。

    除了 int 和 float，Python 还支持其他数字类型，例如 Decimal（精确的浮点数） 或 Fraction （分数）。
    """

    x = 1  # 定义整型变量
    y = 3

    # 使用 type() 函数进行类型检查
    print("type(x) ->", type(x))  # <class 'int'>
    print("x+y = %d" % (x + y))

    # 浮点型：
    pi = 3.1415926
    # pi = 3.141593,type of pi -> <class 'float'>
    print("pi = %f,type(pi) -> %s。保留两位小数 %.2f" % (pi, type(pi), pi))

    # 单行字符串
    s = "Hello world"
    # 多行字符串
    s1 = """
    使用\""" \""" 或 \''' \''' 
    可以书写多行文本
    """
    print("s+s1 = %s \n" % (s + s1))
    print("type(s) ->", type(s))  # <class 'str'>

    # 复数：能被2整除的数。
    c = 1 + 5j
    # c = (1+5j), type(c) -> <class 'complex'>
    print("c = %s, type(c) -> %s" % (c, type(c)))

    # 布尔型
    flag = True  # 注意：首字母大写
    print("flag = %s,type(flag) -> %s" % (flag, type(flag)))


"""
print()函数中输出的字符串使用了占位符语法:
字符串之后的%后面跟的变量值会替换掉占位符然后输出到终端中
%s : 字符串的占位符
%d : 整数的占位符
%f : 小数的占位符，%.Nf 其中 N 表示保留小数位数（如： %.2f 表示保留2位小数）
%% : 表示百分号（因为百分号代表了占位符，所以带占位符的字符串中要表示百分号必须写成%%），
"""


def type_cast_test():
    """
    类型转换：
    - int()：将一个数值或字符串转换成整数，可以指定进制。
    - float()：将一个字符串转换成浮点数。
    - str()：将指定的对象转换成字符串形式，可以指定编码。
    - chr()：将整数转换成该编码对应的字符串（一个字符）。
    - ord()：将字符串（一个字符）转换成对应的编码（整数）。
    """
    print('int("123") -> %d' % (int("123")))
    print('float("3.1415926") -> %f' % (float("3.1415926")))
    print("str(3.1415926) = %s,str(True)=%s" % (float("3.1415926"), str(True)))
    print('chr(32) = %s,ord("A")=%s' % (chr(62), ord("A")))


def variable_define_test():
    """
    变量命名规则：
    硬性规则：
    变量名由字母（广义的Unicode字符，不包括特殊字符）、数字和下划线构成，数字不能开头。
    大小写敏感（大写的a和小写的A是两个不同的变量）。
    不要跟关键字（有特殊含义的单词，后面会讲到）和系统保留字（如函数、模块等的名字）冲突。
    """
    # PEP 8要求：
    arg = "456"  # 用小写字母拼写，多个单词用下划线连接。
    _arg2 = 123  # 受保护的实例属性用单个下划线开头
    __arg3 = True  # 私有的实例属性用两个下划线开头
    print(arg, _arg2, __arg3)


# variable_type_test()
# type_cast_test()
# variable_define_test()
